import { createApp } from 'vue';
import { createPinia } from 'pinia';
import ElementPlus from 'element-plus';
import 'element-plus/dist/index.css';
import App from './App.vue';
import router from './router/index';
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate';
import axios from 'axios';
import comment from '@/components/comments.vue';
import { ElMessage } from 'element-plus';
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import { useUserStore } from './stores/user';
import {ref} from 'vue'
import { log } from 'console';
import 'element-plus/theme-chalk/dark/css-vars.css'
import '@/assets/base.css'
// import '@fortawesome/fontawesome-free/css/all.css'; // 如果需要 FontAwesome 样式

// 设置 axios 的时区头部信息
axios.defaults.headers['TimeZone'] = Intl.DateTimeFormat().resolvedOptions().timeZone;

const pinia = createPinia();

// 自定义 Pinia 插件
pinia.use(({ store }) => {
  const initialState = JSON.parse(JSON.stringify(store.$state));
  store.$reset = () => {
    store.$patch(initialState);
  };
});

// 使用 pinia-plugin-persistedstate 插件
pinia.use(piniaPluginPersistedstate);
// 添加 Axios 请求拦截器
axios.interceptors.request.use(
  (config) => {
    // 检查请求方法是否为 GET
    console.log('请求拦截器', config.method);
    


    const userStore = useUserStore();
    // 从本地存储或 Pinia 中获取 token
    const token = ref(''); // 或者从 Pinia 的 store 中获取
    if (userStore.loginstatus) {
      token.value = userStore.token;
      console.log('token', token);
    }
    if (token.value) {
      // 将 token 添加到请求头中
      config.headers.Authorization = `Bearer ${token.value}`;
    }
    console.log('请求拦截器', config);
    return config;
  },
  (error) => {
    // 处理请求错误
    return Promise.reject(error);
  }
);

// 如果你需要处理响应拦截，也可以在这里添加
axios.interceptors.response.use(
  (response) => {
    // 在响应返回之前可以处理，比如自动刷新 token 或者处理错误
    return response;
  },
  (error) => {
    // 响应错误处理
    return Promise.reject(error);
  }
);
// 创建 Vue 应用
const app = createApp(App);

// 使用 router 和 pinia
app.use(router);
app.use(pinia);

for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}
app.use(ElementPlus);


// 全局注册组件
app.component('comment', comment);
app.config.globalProperties.$message = ElMessage;

// 挂载应用
app.mount('#app');
